# -*- coding: utf-8 -*-
# @Author: QX
# @File: CasePlugin.py
'''
这里的方法名函数都是不能修改，因为用到是内置的构子函数
是pytest自带的，会执行用例之前，自动的进行调用的。
'''
from parse.Caseparser import case_parser
'''
这段代码的作用是构建一个 pytest 插件，能够：
接收用户输入的测试用例类型和路径。
自动解析测试用例文件。
动态生成并参数化测试用例。
处理测试用例名称的编码问题，确保兼容性。
适用于自动化测试框架中，实现灵活、可扩展的测试用例管理与执行。
'''

class CasesPlugin:
    #生成pytest中的参数
    '''
    作用：注册新的命令行选项
    '''
    def pytest_addoption(self,parser):
        parser.addoption("--type",action="store",default='yaml',help='yaml类型的测试')
        parser.addoption("--cases",action="store",default='./examples',help='yaml的测试用例的目录')

    #调用测试用例，同时对测试用例参数化
    def pytest_generate_tests(self,metafunc):
        case_type = metafunc.config.getoption('type')
        case_dir = metafunc.config.getoption('cases')
        #调用测试用例的解析器
        data = case_parser(case_type,case_dir)
        #对测试用例进行参数化，自动交给runner去执行
        metafunc.parametrize('caseinfo',data['case_infos'],ids=data['case_names'])

    #转码
    def pytest_collection_modifyitems(self,items):
        for item  in items:
            item.name = item.name.encode("utf-8").decode("unicode_escape")
            item._nodeid = item.nodeid.encode("utf-8").decode("unicode_escape")


